#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Analog_to_Digital.h"
#include "Timer.h"
uint16_t adc_val=0;

void show_adc(uint8_t line_number,ADC_TypeDef* ADCx);

int main(void)
{
	/*模块初始化*/
	OLED_Init();		//OLED初始化
	
    
    timer_init();
    
    init_adc();
    
	/*OLED显示*/


	OLED_ShowString(1, 1, "adc1:00.00v");
    OLED_ShowString(2, 1, "interrupt:00.00v");
    //OLED_ShowString(3, 1, "adc3:00.00v");
    //OLED_ShowString(4, 1, "adc4:00.00v");
    //ADC_SoftwareStartConvCmd(ADC1,ENABLE);
	
	while (1)
	{
        
        float voltage = 3.3 * (float)adc_val/0xfff ;
    
		OLED_ShowNum(2,11,voltage,2);
        OLED_ShowNum(2,14,(int)(voltage*100)%100,2);
        
        
        
        /*
            注意：如果是使用 proteus 模拟程序的话
            VDDA 和 VSSA 需要 分别接 VDD 和 GND
        */
        show_adc(1,ADC1);
        //Delay_s(1);
	}
}


void show_adc(uint8_t line_number,ADC_TypeDef* ADCx){

    uint16_t analog = ADC_GetConversionValue(ADCx);
    //OLED_ShowNum(2,9,analog,4);
    
    // 因为adc模块的参考电压接的是3.3v，所以这里是 3.3
    // adc 量程最大只有12位，转换为16进制就是 0xfff
    float voltage = 3.3 * (float)analog/0xfff ;
    
    OLED_ShowNum(line_number,6,voltage,2);
    OLED_ShowNum(line_number,9,(int)(voltage*100)%100,2);
}


void ADC1_2_IRQHandler(void){
    
    if(ADC_GetITStatus(ADC1,ADC_IT_EOC)==SET){
    
        adc_val=ADC_GetConversionValue(ADC1);
        
        ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
    }
    

}
